package com.gftBrazil.BankSystem.bean;

import com.gftBrazil.BankSystem.bean.enums.EstadoCliente;
import com.gftBrazil.BankSystem.bean.enums.UnidadeFederativa;
import java.util.Comparator;

/**
 *
 * @author JRSS
 */
public abstract class ClienteBean implements Comparable<ClienteBean> {

    private int codigoCliente;
    private String nome;
    private String cidade;
    private UnidadeFederativa unidadeFederativa = UnidadeFederativa.SP;
    private EstadoCliente estadoCliente = EstadoCliente.ATIVO;
    protected String documento;

    /**
     * @return the codigoCliente
     */
    public int getCodigoCliente() {
        return codigoCliente;
    }

    /**
     * @param codigoCliente the codigoCliente to set
     */
    public void setCodigoCliente(int codigoCliente) {
        this.codigoCliente = codigoCliente;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the cidade
     */
    public String getCidade() {
        return cidade;
    }

    /**
     * @param cidade the cidade to set
     */
    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    /**
     * @return the unidadeFederativa
     */
    public UnidadeFederativa getUnidadeFederativa() {
        return unidadeFederativa;
    }

    /**
     * @param unidadeFederativa the unidadeFederativa to set
     */
    public void setUnidadeFederativa(UnidadeFederativa unidadeFederativa) {
        this.unidadeFederativa = unidadeFederativa;
    }

    /**
     * @return the estadoCliente
     */
    public EstadoCliente getEstadoCliente() {
        return estadoCliente;
    }

    /**
     * @param estadoCliente the estadoCliente to set
     */
    public void setEstadoCliente(EstadoCliente estadoCliente) {
        this.estadoCliente = estadoCliente;
    }

    /**
     * @return the documento
     */
    public abstract String getDocumento();

    /**
     * @param documento the documento to set
     */
    public abstract void setDocumento(String documento);

    @Override
    public int compareTo(ClienteBean t) {

        int value = t.getCodigoCliente();
        return getCodigoCliente() - value ;
    }

    public static Comparator<ClienteBean> ClienteBeanNameComparator
            = new Comparator<ClienteBean>() {

                @Override
                public int compare(ClienteBean cliente1, ClienteBean cliente2) {

                    String clienteNome1 = cliente1.getNome().toUpperCase();
                    String clienteNome2 = cliente2.getNome().toUpperCase();

                    int value = clienteNome1.compareTo(clienteNome2);
                    System.out.println("Compare " + clienteNome1 + " with " + clienteNome2);
                    return value;
                }
            };
    
        public static Comparator<ClienteBean> ClienteBeanCityComparator
            = new Comparator<ClienteBean>() {

                @Override
                public int compare(ClienteBean cliente1, ClienteBean cliente2) {

                    String clienteCity1 = cliente1.getCidade().toUpperCase();
                    String clienteCity2 = cliente2.getCidade().toUpperCase();

                    int value = clienteCity1.compareTo(clienteCity2);
                    System.out.println("Compare " + clienteCity1 + " with " + clienteCity2);
                    return value;
                }
            };
}
